from django.http import JsonResponse
from functools import wraps

def login_filter(error_message="请先登录", status_code=401, redirect_url=None):
    """
    登录检查装饰器。

    :param error_message: 未登录时的错误消息（默认为 "请先登录"）。
    :param status_code: 未登录时的 HTTP 状态码（默认为 401 Unauthorized）。
    :param redirect_url: 未登录时重定向的 URL（如果未提供，则返回 JSON 响应）。
    :return: 装饰后的视图函数。
    """
    def decorator(view_func):
        @wraps(view_func)  # 保留原始函数的元信息
        def wrapper(request, *args, **kwargs):
            # 检查用户是否已登录
            if request.session.get('user_id'):
                # 用户已登录，继续执行视图函数
                return view_func(request, *args, **kwargs)
            else:
                # 用户未登录
                if redirect_url:
                    # 如果需要重定向，返回重定向响应
                    from django.shortcuts import redirect
                    return redirect(redirect_url)
                else:
                    # 返回 JSON 错误响应
                    return JsonResponse({'error': error_message}, status=status_code)
        return wrapper
    return decorator